﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using METODESA.Server.Data.Exceptions;
using METODESA.Server.Data.METODESA.Entity;
using METODESA.Server.Data.METODESA.Factorys;
using METODESA.Server.Data.METODESA.Nhibernate;
using NHibernate;

namespace Metodesa.Logic
{
    public class ProductoLogic
    {


        public static IList<Producto> processSearch(string search, string criteria)
        {
            if (criteria == "" || search == "")
            {
                return ProductoDao.getAllProducto();
            }
            else
            {

                switch (criteria)
                {
                    case "Categoria": return ProductoDao.getProductoByCategory(search);

                    case "Name": return ProductoDao.getProductoByName(search);

                }

            }

            return null;
        }




        public static int add(double precio, string categoria, string nombre)
        {
            try
            {
                Producto producto= FactoryProducto.getProducto();
                producto.Categoria = categoria;
                producto.Precio = precio;
                producto.Nombre = nombre;
                ProductoDao.saveEntity(producto);
            }
            catch (HibernateException e)
            {
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new EntityCouldntBeSaved("El producto no se ha podido guardar " + e.Message);
            }
            return 0;
        }

        public static int update(int id,double precio,string categoria,string nombre)
        {
            try
            {
                Producto producto = ProductoDao.getProductoById(id);
                producto.Precio = precio;
                producto.Categoria = categoria;
                producto.Nombre = nombre;
                ProductoDao.updateEntity(producto);
            }
            catch (HibernateException e)
            { 
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new EntityCouldntBeUpdated("El producto no se ha podido modificar " + e.Message);
            }
            return 0;
        }

        public static int delete(int id)
        { 
            try
            {
                Producto producto = ProductoDao.getProductoById(id);

                if (true)      //todo Cambiar cuando tengamos venta
                {
                   ProductoDao.deleteEntity(producto);
                }
                else
                {
                    
                    NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                    throw new EntityCouldntBeDeleted
                        ("El producto no se ha podido modificar por que tiene una venta asociada");

                }
            }
            catch (HibernateException e)
            {
                NHibernateHelper.GetCurrentSession().Clear(); // Quitamos el query que nos dio error
                throw new HibernateException
                    ("El producto no se ha podido modificar " + e.Message);
            }
            return 0;
        }
    }
}
